<?php
defined('BASE') or exit('Access Denied!');

/**
 * Obullo Framework (c) 2009.
 *
 * PHP5 MVC Based Minimalist Software.
 * 
 * @package         obullo       
 * @author          obullo.com
 * @copyright       Ersin Güvenç (c) 2009.
 * @license         public
 * @since           Version 1.0
 * @filesource
 * @license
 */

// ------------------------------------------------------------------------

/**
 * Obullo Smiley Helpers
 *
 * @package     Obullo
 * @subpackage  Helpers
 * @category    Helpers
 * @author      Ersin Güvenç
 * @link        
 */

// ------------------------------------------------------------------------

/**
* Smiley Javascript
*
* Returns the javascript required for the smiley insertion.  Optionally takes
* an array of aliases to loosely couple the smiley array to the view.
*
* @access	public
* @param	mixed	alias name or array of alias->field_id pairs
* @param	string	field_id if alias name was passed in
* @return	array
*/
function smiley_js($alias = '', $field_id = '')
{
	static $do_setup = TRUE;

	$r = '';

	if ($alias != '' && ! is_array($alias))
	{
		$alias = array($alias => $field_id);
	}

	if ($do_setup === TRUE)
	{
			$do_setup = FALSE;
		
			$m = array();
		
			if (is_array($alias))
			{
				foreach($alias as $name => $id)
				{
					$m[] = '"'.$name.'" : "'.$id.'"';
				}
			}
		
			$m = '{'.implode(',', $m).'}';
		
			$r .= <<<EOF
		
			var smiley_map = {$m};

			function insert_smiley(smiley, field_id) {
				var el = document.getElementById(field_id), newStart;
			
				if ( ! el && smiley_map[field_id]) {
					el = document.getElementById(smiley_map[field_id]);
				
					if ( ! el)
						return false;
				}
			
				el.focus();
				smiley = " " + smiley;

				if ('selectionStart' in el) {
					newStart = el.selectionStart + smiley.length;

					el.value = el.value.substr(0, el.selectionStart) +
									smiley +
									el.value.substr(el.selectionEnd, el.value.length);
					el.setSelectionRange(newStart, newStart);
				}
				else if (document.selection) {
					document.selection.createRange().text = text;
				}
			}
EOF;
	}
	else
	{
		if (is_array($alias))
		{
			foreach($alias as $name => $id)
			{
				$r .= 'smiley_map["'.$name.'"] = "'.$id.'";'."\n";
			}
		}
	}

	return '<script type="text/javascript" charset="utf-8">'.$r.'</script>';
}

// ------------------------------------------------------------------------

/**
* Get Clickable Smileys
*
* Returns an array of image tag links that can be clicked to be inserted 
* into a form field.  
*
* @access	public
* @param	string	the URL to the folder containing the smiley images
* @return	array
*/
function get_clickable_smileys($image_url, $alias = '', $smileys = NULL)
{
	// For backward compatibility with js_insert_smiley
	
	if (is_array($alias))
	{
		$smileys = $alias;
	}
	
	if ( ! is_array($smileys))
	{
		if (FALSE === ($smileys = _get_smiley_array()))
		{
			return $smileys;
		}
	}

	// Add a trailing slash to the file path if needed
	$image_url = rtrim($image_url, '/').'/';

	$used = array();
	foreach ($smileys as $key => $val)
	{
		// Keep duplicates from being used, which can happen if the
		// mapping array contains multiple identical replacements.  For example:
		// :-) and :) might be replaced with the same image so both smileys
		// will be in the array.
		if (isset($used[$smileys[$key][0]]))
		{
			continue;
		}
		
		$link[] = "<a href=\"javascript:void(0);\" onClick=\"insert_smiley('".$key."', '".$alias."')\"><img src=\"".$image_url.$smileys[$key][0]."\" width=\"".$smileys[$key][1]."\" height=\"".$smileys[$key][2]."\" alt=\"".$smileys[$key][3]."\" style=\"border:0;\" /></a>";	

		$used[$smileys[$key][0]] = TRUE;
	}

	return $link;
}

// ------------------------------------------------------------------------

/**
* Parse Smileys
*
* Takes a string as input and swaps any contained smileys for the actual image
*
* @access	public
* @param	string	the text to be parsed
* @param	string	the URL to the folder containing the smiley images
* @return	string
*/
function parse_smileys($str = '', $image_url = '', $smileys = NULL)
{
	if ($image_url == '')
	{
		return $str;
	}

	if ( ! is_array($smileys))
	{
		if (FALSE === ($smileys = _get_smiley_array()))
		{
			return $str;
		}
	}

	// Add a trailing slash to the file path if needed
	$image_url = preg_replace("/(.+?)\/*$/", "\\1/",  $image_url);

	foreach ($smileys as $key => $val)
	{
		$str = str_replace($key, "<img src=\"".$image_url.$smileys[$key][0]."\" width=\"".$smileys[$key][1]."\" height=\"".$smileys[$key][2]."\" alt=\"".$smileys[$key][3]."\" style=\"border:0;\" />", $str);
	}

	return $str;
}

// ------------------------------------------------------------------------

/**
* Get Smiley Array
*
* Fetches the config/smiley.php file
*
* @access	private
* @return	mixed
*/
function _get_smiley_array()
{
	if ( ! file_exists(APP .'config'. DIRECTORY_SEPARATOR .'smileys'. EXT))
	{
		return FALSE;
	}

	include(APP .'config'. DIRECTORY_SEPARATOR .'smileys'. EXT);

	if ( ! isset($smileys) OR ! is_array($smileys))
	{
		return FALSE;
	}

	return $smileys;
}

// ------------------------------------------------------------------------

/**
* JS Insert Smiley
*
* Generates the javascript function needed to insert smileys into a form field
*
* DEPRECATED as of version 1.7.2, use smiley_js instead
*
* @access	public
* @param	string	form name
* @param	string	field name
* @return	string
*/
function js_insert_smiley($form_name = '', $form_field = '')
{
	return <<<EOF
<script type="text/javascript">
function insert_smiley(smiley)
{
	document.{$form_name}.{$form_field}.value += " " + smiley;
}
</script>
EOF;
}


/* End of file smiley_helper.php */
/* Location: ./base/helpers/smiley.php */